﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

// このファイルだけ構造体を2つ定義しているのは違和感があるような・・・？

namespace DDD.Core {
    /// <summary>
    /// トラック ターゲットをあらわす構造体
    /// </summary>
    /// <remarks>
    /// トラック ターゲットはアニメーション対象のオブジェクトとプロパティの名前を保存する構造体です｡
    /// </remarks>
    public struct TrackTarget {
        /// <summary>
        /// コンストラクター
        /// </summary>
        /// <param name="obj">アニメーション対象のオブジェクト</param>
        /// <param name="propertyName">プロパティ名</param>
        internal TrackTarget (Object obj, string propertyName)
            : this () {
            this.Object = obj;
            this.PropertyName = propertyName;
        }
        /// <summary>
        /// アニメーション対象のオブジェクト
        /// </summary>
        public Object Object;

        /// <summary>
        /// プロパティ名
        /// </summary>
        public string PropertyName;
    }

    /// <summary>
    /// アニメーション トラッカーをあらわす構造体
    /// </summary>
    /// <remarks>
    /// トラッカー情報は以下の3要素からなる構造体です｡
    /// <list type="bullet">
    ///   <item><see cref="AnimationTrack"/> - アニメーションの元データ</item>
    ///   <item><see cref="Object"/> - アニメーション対象のオブジェクト</item>
    ///   <item><seealso cref="string"/> - アニメーション対象のプロパティの名前</item>
    /// </list>
    /// トラッカー情報はどのアニメーションデータがどのオブジェクトのプロパティを書き換えるかを追跡します｡
    /// </remarks>
    public struct AnimationTracker {
        /// <summary>
        /// コンストラクター
        /// </summary>
        /// <param name="trackTarget">アニメーション対象のオブジェクト</param>
        /// <param name="propertyName">プロパティの名前</param>
        /// <param name="trackSource">アニメーションデータ</param>
        internal AnimationTracker (Object trackTarget, string propertyName, AnimationTrack trackSource)
            : this () {
            this.TrackTarget = new TrackTarget (trackTarget, propertyName);
            this.SourceTrack = trackSource;
        }
        /// <summary>
        /// アニメーション対象の情報
        /// </summary>
        /// <remarks>
        /// アニメーション対象となるオブジェクトの情報です。
        /// </remarks>
        public TrackTarget TrackTarget { get; set; }

        /// <summary>
        /// アニメーションの元データ
        /// </summary>
        /// <remarks>
        /// アニメーションの元データとなる <see cref="AnimationTrack"/> オブジェクトです。
        /// </remarks>
        public AnimationTrack SourceTrack { get; set; }
    }
}
